package com.kaizeli.website.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kaizeli.website.pojo.dto.base.PageDTO;
import com.kaizeli.website.pojo.model.EmployeeDO;
import com.kaizeli.website.pojo.vo.EmployeeVO;
import com.kaizeli.website.query.EmployeeQuery;

/**
 * 员工服务接口
 */
public interface EmployeeService {
    
    /**
     * 分页查询员工列表
     * @param query 查询条件
     * @return 分页结果
     */
    PageDTO<EmployeeVO> pageQuery(EmployeeQuery query);
    
    /**
     * 根据ID查询员工详情
     * @param id 员工ID
     * @return 员工详情
     */
    EmployeeVO getById(Long id);
    
    /**
     * 根据员工编号查询员工详情
     * @param employeeCode 员工编号
     * @return 员工详情
     */
    EmployeeVO getByEmployeeCode(String employeeCode);
    
    /**
     * 新增员工
     * @param employeeDO 员工信息
     * @return 员工ID
     */
    Long save(EmployeeDO employeeDO);
    
    /**
     * 更新员工信息
     * @param employeeDO 员工信息
     * @return 是否成功
     */
    Boolean update(EmployeeDO employeeDO);
    
    /**
     * 根据ID删除员工
     * @param id 员工ID
     * @return 是否成功
     */
    Boolean deleteById(Long id);
    
    /**
     * 批量删除员工
     * @param ids 员工ID列表
     * @return 是否成功
     */
    Boolean deleteBatchByIds(java.util.List<Long> ids);
    
    /**
     * 更新员工状态
     * @param id 员工ID
     * @param status 状态（1在职，0离职）
     * @return 是否成功
     */
    Boolean updateStatus(Long id, Integer status);
    
    /**
     * 根据员工状态查询员工列表
     * @param status 员工状态（1在职，0离职）
     * @return 员工列表
     */
    java.util.List<EmployeeVO> getEmployeesByStatus(Integer status);
    
    /**
     * 搜索员工
     * @param keyword 搜索关键词（员工姓名或编号）
     * @return 员工列表
     */
    java.util.List<EmployeeVO> search(String keyword);
    
    /**
     * 获取所有员工列表
     * @return 员工列表
     */
    java.util.List<EmployeeVO> getAllEmployees();
}